package Controlador;
import java.awt.event.*;
import Modelo.*;
import Vista.*;

import java.io.IOException;

import javax.swing.JFrame;
import javax.xml.parsers.*;

public class Controlador {
	
	private JFrame vista;
	private JFrame ventanaPrincipal;
	private Dios dios;
	private Terreno terreno;
	private Habilidad habilidad;
	private TemporizadorDeLanzadaDePooglins temporizador;
	
	@SuppressWarnings("deprecation")
	public Controlador()
	{   		
		this.dios = new Dios();	
		this.terreno = this.dios.getPrimeroPlaneta().getTerreno();
		this.ventanaPrincipal = new VentanaPrincipal(this);
		this.ventanaPrincipal.show();
		this.dios.setControlador(this);
	}
	
	public void cargarSiguienteNivel(){
		this.vista.setVisible(false);
		this.terreno = this.dios.getPlanetaActual().getTerreno();
		this.temporizador = new TemporizadorDeLanzadaDePooglins(3500,
				terreno.getPlaneta(),terreno.getPlaneta().getCantidadPooglinsPlaneta());
		this.vista = new Ventana(terreno,terreno.getPlaneta().getPooglins(),this);
		this.vista.setVisible(true);
		this.dios.run();
		this.dios.continuarDios();
	}
	
	public void LanzarAplicacion(){
		this.vista = new Ventana(terreno,terreno.getPlaneta().getPooglins(),this);
		this.vista.setVisible(false);
		this.temporizador = new TemporizadorDeLanzadaDePooglins(3500,
				terreno.getPlaneta(),terreno.getPlaneta().getCantidadPooglinsPlaneta());
	
	}
		
	private class EscuchaBotonTaladro implements ActionListener
	{	public void actionPerformed(ActionEvent e)
		{	
			habilidad = new TaladroUltraSonico();    
			((Ventana) vista).setHabilidad(habilidad);			

	       	
		}
	}
	
	public ActionListener getListenerBotonTaladro() {
		return new EscuchaBotonTaladro();
	}
	
	private class EscuchaBotonRayoLaser implements ActionListener
	{	public void actionPerformed(ActionEvent e)
		{
			habilidad = new RayoLaser();   
			((Ventana) vista).setHabilidad(habilidad);			

		}
	}

	public ActionListener getListenerBotonRayoLaser() {
		return new EscuchaBotonRayoLaser();

	}	
		
	private class EscuchaBotonPausar implements ActionListener
	{	@SuppressWarnings("deprecation")
	public void actionPerformed(ActionEvent e)
		{
			dios.suspend();
			temporizador.suspend();
			temporizador.pararTemporizador();
			((Ventana)vista).getReloj().detenerReloj();
		}

	}

	public ActionListener getListenerBotonPausar() {
		return new EscuchaBotonPausar();

	}	
	
	
	private class EscuchaBotonTeletransportacion implements ActionListener
	{	public void actionPerformed(ActionEvent e)
		{
			habilidad = new Teletransportacion();   
			((Ventana) vista).setHabilidad(habilidad);			

		}
	}

	public ActionListener getListenerBotonTeletransportacion() {
		return new EscuchaBotonTeletransportacion();

	}	
	
	private class EscuchaBotonIniciarJuego implements ActionListener
	{	public void actionPerformed(ActionEvent e)
		{
			LanzarAplicacion();
			vista.setVisible(true);
			ventanaPrincipal.setVisible(false);
			dios.start();
			dios.setReloj(((Ventana)vista).getReloj());
		}
	}

	public ActionListener getListenerBotonIniciarJuego() {
		return new EscuchaBotonIniciarJuego();

	}
	
	private class EscuchaBotonCongelamiento implements ActionListener
	{	public void actionPerformed(ActionEvent e)
		{
			habilidad = new Congelamiento();   
			((Ventana) vista).setHabilidad(habilidad);			

		}
	}

	public ActionListener getListenerBotonCongelamiento() {
		return new EscuchaBotonCongelamiento();

	}
	
	private class EscuchaBotonPlatilloVolador implements ActionListener
	{	public void actionPerformed(ActionEvent e)
		{
			habilidad = new PlatilloVolador();    	
			((Ventana) vista).setHabilidad(habilidad);			

		}
	}

	public ActionListener getListenerBotonPlatilloVolador() {
		return new EscuchaBotonPlatilloVolador();

	}
	
	private class EscuchaBotonTunelElectroMagnetico implements ActionListener
	{	public void actionPerformed(ActionEvent e)
		{
			habilidad = new TunelElectromagnetico();  
			((Ventana) vista).setHabilidad(habilidad);			
		}
	}

	public ActionListener getListenerBotonTunelElectroMagnetico() {
		return new EscuchaBotonTunelElectroMagnetico();

	}
	
	private class EscuchaBotonSalir implements ActionListener
	{	public void actionPerformed(ActionEvent e)
		{
			System.exit(0);
		}
	}

	public ActionListener getListenerBotonSalir() {
		return new EscuchaBotonSalir();

	}
	
	private class EscuchaBotonGuardar implements ActionListener
	{	@SuppressWarnings("deprecation")
	public void actionPerformed(ActionEvent e)
		{
		terreno.getPlaneta().quitarPooglinsMuertos();
		terreno.getPlaneta().quitarPooglinsSalvados();
		((Ventana)vista).getReloj().detenerReloj();
		dios.suspend();
		temporizador.suspend();
		
		Partida miPartida = new Partida (terreno.getPlaneta(),terreno);

		try {
			// Aca guardo el estado de la partida //
			PersistidorDePartidas.guardarPartida("Partida.xml", miPartida);
				
			} catch (IOException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			} catch (ParserConfigurationException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			}		
		}
	}

	public ActionListener getListenerBotonGuardar() {
		return new EscuchaBotonGuardar();

	}
	
	private class EscuchaBotonRecuperar implements ActionListener
	{	public void actionPerformed(ActionEvent e)
		{
		// Aca recupero el estado de la partida guardada //
		try {
			Partida otraPartida;
			otraPartida = PersistidorDePartidas.cargarPartida("Partida.xml");
			// Recupero el planeta //
			Planeta otroPlaneta = otraPartida.getPlaneta();
			Controlador controlador = ((Ventana) vista).getControlador();
			vista.setVisible(false);
			dios = new Dios();
			dios.cargarPlanetaActual(otroPlaneta);			
			vista = new Ventana(otraPartida.getPlaneta().getTerreno(),otraPartida.getPlaneta().getPooglins(),controlador);
			vista.setVisible(true);
			dios.start();
			

		} catch (IOException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		} catch (ClassNotFoundException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}

		}
	}

	public ActionListener getListenerBotonRecuperar() {
		return new EscuchaBotonRecuperar();

	}
	
	private class EscuchaBotonPlay implements ActionListener{
		@SuppressWarnings("deprecation")
		public void actionPerformed(ActionEvent e)
		{
			dios.resume();
			temporizador.resume();
			temporizador.continuarTemporizador();
			((Ventana)vista).getReloj().continuarReloj();
		}
	}
	
	public ActionListener getListenerBotonPlay() {
		return new EscuchaBotonPlay();

	}

}